package com.itheima.edu.info.student.manager.dao;

import com.itheima.edu.info.student.manager.domain.Student;

/*
库管类
1.接受业务员传过来的数据
2.将数据拿到系统数据仓库中进行相应操作
3.将处理结果返还给业务员
 */
public class StudentDao implements BaseStudentDao {
    //定义一个系统数据仓库:数组容器
    private static Student[] stus = new Student[5];


    //静态代码块:随着类的加载而加载
    //一般用来作系统数据的初始化,配置文件的加载
    static {
        stus[0] = new Student("heima001", "张三", "23", "1999-11-11");
        stus[1] = new Student("heima002", "李四", "24", "1998-11-11");
    }


    //库管类中添加学生的方法
    public boolean addStudent(Student stu) {
        //通过标记位思想来确定本次要添加的数据对象存入数组的位置
        //先假设数组已经存满
        int index = -1;
        //遍历数组
        for (int i = 0; i < stus.length; i++) {
            //如果数组存在元素为null,让index记录该元素的索引,结束循环
            if (stus[i] == null) {
                index = i;
                break;
            }
        }
        //如果index为-1,则说明数组已满,添加失败,返回false
        if (index == -1) {
            return false;
            //如果index不为-1,则说明数组可以添加,让数组索引为index的元素记录要添加的学生对象的地址,返回true
        } else {
            stus[index] = stu;
            return true;
        }


    }

    //库管类拿到学生数组的方法
    public Student[] showStudent() {
        return stus;
    }


    //库管类删除学生功能
    public void deleteStudent(String id) {
        int index = getIndex(id);
        stus[index] = null;
    }

    //库管类修改学生功能
    public void updateStudent(String updateId, Student newStu) {
        int index = getIndex(updateId);
        stus[index] = newStu;

    }

    //封装一个根据学号查找学生对象在数组中对应索引的位置的方法
    public int getIndex(String id) {
        //假设要修改id学生在数组中不存在
        int index = -1;
        //遍历数组,如果当前索引元素的id与要修改学生id相同,令index记录该元素的索引值
        for (int i = 0; i < stus.length; i++) {
            if (stus[i] != null && id.equals(stus[i].getId())) {
                index = i;
            }
        }
        return index;
    }
}
